home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 131 / XENIATGM131.iso / Shareware / openOffice.org 641 / Windows / f_0017 / FormWizard.xba < prev    next >
Extensible Markup Language  |  2001-11-22  |  11KB  |  333 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3.  <script:module xmlns:script="http://openoffice.org/2000/script" script:name="FormWizard" script:language="StarBasic">Option Explicit
  4.  
  5. Public DocumentName as String
  6. Public FormPath as String
  7. Public WizardPath as String
  8. Public WebWizardPath as String
  9. Public WorkPath as String
  10. Public TexturePath as String
  11. Public sQueryName as String
  12. Public NumberofStyles as Integer
  13. Public oDBConnection as Object
  14. Public bWithBackGraphic as Boolean
  15. Public bNeedFieldRefresh as Boolean
  16. Public oDBForm as Object
  17. Public oColumns() as Object
  18. Public sDatabaseList()
  19. Public TableNames() as String
  20. Public QueryNames() as String
  21. Public FieldNames() as String
  22. Public ImgFieldNames() as String
  23. Public oDBContext as Object
  24. Public oUcb as Object
  25. Public oDocInfo as Object
  26. Public WidthList(15,3)
  27. Public ImgWidthList(3,3)
  28. Public sDBName as String
  29. Public Tablename as String
  30. Public Const SBSIZETEXT = "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog."
  31. Public bDisposeDoc as Boolean
  32. Public bDebug as Boolean
  33.  
  34.  
  35. ' The macro can be called in 4 possible scenarios:
  36. ' Scenario 1. No parameters at given
  37. ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  38. ' Scenario 3: a data source and a connection are given
  39. ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  40.  
  41. Sub Main()
  42. Dim oLocDBContext as Object
  43. Dim oLocConnection as Object
  44.  
  45. ' Scenario 1. No parameters at given
  46.     MainWithDefault()
  47.  
  48. ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  49. '    MainWithDefault("Bibliography")
  50.  
  51. ' Scenario 3: a data source and a connection are given
  52. '    oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  53. '    oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","")
  54. '    MainWithDefault("Bibliography", oLocConnection)
  55.  
  56. ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  57. '    oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  58. '    oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","")
  59. '    MainWithDefault("Bibliography", oLocConnection, com.sun.star.sdb.CommandType.TABLE, "biblio")
  60. End Sub
  61.  
  62.  
  63. Sub MainWithDefault(Optional DatasourceName as String, Optional oConnection as Object, Optional CommandType as Integer, Optional sContent as String)
  64. Dim i as Integer
  65. Dim SelCount as Integer
  66.     BasicLibraries.LoadLibrary("Tools")
  67.     BasicLibraries.LoadLibrary("WebWizard")
  68.     bDebug = True
  69.     If Not bDebug Then
  70.         On Local Error GoTo WIZARDERROR
  71.     End If
  72.     OpenFormDocument()
  73.     CurArrangement = 0
  74.     bControlsareCreated = False
  75.     bEnableBinaryOptionGroup = False
  76.     bDisposeDoc = True
  77.     MaxIndex = -1
  78.     If Not InitResources("Formwizard","dbw") Then
  79.         Exit Sub
  80.     End If
  81.     oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  82.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  83.     FormPath = GetOfficeSubPath("Template","wizard/bitmap")
  84.     WebWizardPath = GetOfficeSubPath("Template","wizard/web")
  85.     WizardPath = GetOfficeSubPath("Template","wizard/")
  86.     TexturePath = GetOfficeSubPath("Gallery", "www-back/")
  87.     WorkPath = GetPathSettings("Work")
  88.     ToggleWindow(False)
  89.     oProgressBar.Value = 5
  90.     GetDatabaseNames()
  91.     oProgressBar.Value = 10
  92.     InitializeWidthList()
  93.     oProgressBar.Value = 20
  94.     LoadLanguage
  95.     InitializeLabelValues()
  96.     oProgressBar.Value = 30
  97.     bNeedFieldRefresh = True
  98.     With oDialogModel
  99.         .cmdBack.Enabled = False
  100.         .cmdGoOn.Enabled = False
  101.         .lblTables.Enabled = False
  102.         .lstSelFields.Tag = False
  103.         .Step = 1
  104.         .lstDatabases.StringItemList()= sDatabaseList()' = AddItem(sDatabaseList(i)
  105.     End With
  106.     If Not IsMissing(DataSourceName) Then
  107.         sDBName = DataSourceName
  108.         DlgFormDB.GetControl("lstDatabases").SelectItem(DataSourceName, True)
  109.         If Not IsMissing(oConnection) Then
  110.             ' Scenario 3: a data source and a connection are given
  111.             Set oDBConnection = oConnection
  112.             oDataSource = oDBContext.GetByName(DataSourceName)
  113.             oDialogModel.lstTables.Enabled = True
  114.             oDialogModel.lblTables.Enabled = True
  115.             If GetDBMetaData() Then
  116.                 oDialogModel.lstTables.StringItemList() = AddListToList(TableNames(), QueryNames())
  117.                 iCommandTypes = CreateCommandTypeList()
  118.                 If Not IsMissing(sContent) Then
  119.                     ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  120.                     iCommandTypes() = CreateCommandTypeList()
  121.                     SelCount = CountItemsInArray(oDialogModel.lstTables.StringItemList(), sContent)
  122.                     If SelCount = 1 Then
  123.                         DlgFormDB.GetControl("lstTables").SelectItem(sContent, True)
  124.                     Else
  125.                         If CommandType = com.sun.star.sdb.CommandType.QUERY Then
  126.                             SelIndex = IndexInArray(sContent, QueryNames()
  127.                             DlgFormDB.GetControl("lstTables").SelectItemPos(SelIndex, True)
  128.                         ElseIf CommandType = com.sun.star.sdb.CommandType.TABLE Then
  129.                             SelIndex = IndexInArray(sContent, TableNames()
  130.                             DlgFormDB.GetControl("lstTables").SelectItemPos(Ubound(QueryNames()+1 + SelIndex, True)        
  131.                         End If
  132.                     End If
  133.                     CurCommandType = CommandType
  134.                     FillUpFieldsListbox(False)
  135.                 End If
  136.             End If
  137.         Else
  138.             ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  139.             GetSelectedDBMetaData()
  140.         End If
  141.     Else
  142.         ' Scenario 1: No parameters are given
  143.         ToggleListboxControls(oDialogModel, False)
  144.     End If
  145.     oProgressBar.Value = 50
  146.     DlgFormDB.Title = WizardTitle(1)
  147.     NumberofStyles = FillupWebListbox(oUcb, "/stl", DlgFormDB, "lstStyles", Styles())
  148.     oProgressBar.Value = 60
  149.     CurIndex = GetCurIndex(oDialogModel.lstStyles, Styles(), NumberofStyles,8)
  150.     SetImportStyle()
  151.     oProgressBar.Value = 70
  152.     ConfigurePageStyle()
  153.     oProgressBar.Value = 80
  154.     ToggleWindow(True)
  155.     oProgressBar.Value = 90
  156.     oDialogModel.imgTheme.ImageURL = FormPath & "FormWizard_1.bmp"
  157.     ToggleDatabasePage(True)
  158.     oProgressBar.Value = 100
  159.     DlgFormDB.GetControl("lstDatabases").SetFocus()
  160.     oProgressbar.End
  161.     DlgFormDB.Execute()
  162.     DlgFormDB.Dispose()
  163.     If Not IsNull(oDBConnection) Then
  164.         oDBConnection.Dispose()
  165.     End If
  166.     If bDisposeDoc Then
  167.         oDocument.Dispose()
  168.     End If
  169. WIZARDERROR:
  170.     If Err <> 0 Then    
  171.         Msgbox(sMsgErrMsg, 16, GetProductName())
  172.         Resume LOCERROR
  173.         LOCERROR:        
  174.     End If
  175. End Sub
  176.  
  177.  
  178. Sub FormGetFields()
  179. Dim i as Integer
  180.     ToggleDatabasePage(False)
  181.     FillUpFieldsListbox(True)
  182.     ToggleDatabasePage(True)
  183. End Sub
  184.  
  185.  
  186. Sub FillUpFieldsListbox(bGetCommandType as Boolean)
  187. Dim n as Integer
  188. Dim SelIndex as Integer
  189. Dim QueryIndex as Integer
  190.     If Not bDebug Then
  191.         On Local Error GoTo NOFIELDS
  192.     End If
  193.     n = Ubound(oDialogModel.lstTables.SelectedItems())
  194.     If n > -1 Then
  195.         SelIndex = oDialogModel.lstTables.SelectedItems(0)
  196.         If bGetCommandType Then
  197.             CurCommandType = iCommandTypes(SelIndex)
  198.         End If
  199.         If CurCommandType = com.sun.star.sdb.CommandType.QUERY Then
  200.             QueryIndex = SelIndex - Ubound(Tablenames()) - 1
  201.             Tablename = QueryNames(QueryIndex)
  202.             oColumns = oDBConnection.Queries.GetByName(TableName).Columns
  203.         Else
  204.             Tablename = Tablenames(SelIndex)
  205.             oColumns = oDBConnection.Tables.GetByName(Tablename).Columns
  206.         End If
  207.         GetSpecificFieldNames()
  208.         ToggleListboxControls(oDialogModel, True)
  209.     End If
  210. NOFIELDS:
  211.     If Err <> 0 Then
  212.         MsgBox sMsgErrCouldNotOpenObject, 16, sMsgWizardName
  213.     End If
  214. End Sub
  215.  
  216.  
  217.  
  218. Sub PreviousStep()
  219.     If Not bDebug Then
  220.         On Local Error GoTo WIZARDERROR
  221.     End If
  222.     With oDialogModel
  223.         .Step = 1
  224.         .cmdBack.Enabled = False
  225.         .cmdGoOn.Enabled = True
  226.         .lstSelFields.Tag = Not bControlsareCreated
  227.         .cmdGoOn.Label = sGoOn
  228.         .imgTheme.ImageUrl = FormPath & "FormWizard_1.bmp"
  229.     End With
  230. WIZARDERROR:
  231.     If Err <> 0 Then    
  232.         Msgbox(sMsgErrMsg, 16, GetProductName())
  233.         Resume LOCERROR
  234.         LOCERROR:        
  235.     End If
  236. End Sub
  237.  
  238.  
  239. Sub NextStep()
  240.     If Not bDebug Then
  241.         On Local Error GoTo WIZARDERROR
  242.     End If
  243.  
  244.     Select Case oDialogModel.Step
  245.         Case 1
  246.             bControlsAreCreated = Not (CBool(oDialogModel.lstSelFields.Tag))
  247.             If Not bControlsAreCreated Then
  248.                 GetTableMetaData()
  249.                 CreateDBForm()
  250.                 RemoveShapes()
  251.                 InitializeLayoutSettings()
  252.                 oDBForm.Load
  253.             End If
  254.             oDialogModel.cmdGoOn.Label = sReady
  255.             oDialogModel.cmdBack.Enabled = True
  256.             oDialogModel.Step = 2
  257.             bDisposeDoc = False
  258.         Case 2
  259.             StoreForm()
  260.     End Select
  261.     oDialogModel.imgTheme.ImageUrl = FormPath & "FormWizard_" & oDialogModel.Step & ".bmp"
  262.     DlgFormDB.Title = WizardTitle(oDialogModel.Step)
  263. WIZARDERROR:
  264.     If Err <> 0 Then    
  265.         Msgbox(sMsgErrMsg, 16, GetProductName())
  266.         Resume LOCERROR
  267.         LOCERROR:        
  268.     End If
  269. End Sub
  270.  
  271.  
  272. Sub InitializeLayoutSettings()
  273.     SwitchArrangementButtons(cTabled)
  274.     SwitchAlignMode(SBALIGNLEFT)
  275.     SwitchBorderMode(SB3DBORDER)
  276.     ToggleBorderGroup(bControlsAreCreated)
  277.     ToggleAlignGroup(bControlsAreCreated)
  278.     ArrangeControls()
  279.     If OldAlignMode <> 0 Then
  280.         DlgFormDB.GetControl("optAlign2").Model.State = 0
  281.     End If
  282. End Sub
  283.  
  284.  
  285. Sub ToggleDatabasePage(bDoEnable as Boolean)
  286.     With oDialogModel
  287.         .cmdBack.Enabled = False
  288.         .cmdHelp.Enabled = bDoEnable
  289.         .cmdGoOn.Enabled = Ubound(oDialogModel.lstSelFields.StringItemList()) <> -1
  290.         .hlnBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  291.         .optIgnoreBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  292.         .optBinariesasGraphics.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  293.     End With
  294. End Sub
  295.  
  296.  
  297. Sub StoreForm()
  298. Dim bDocIsStored as Boolean
  299. Dim FilterNames(0,2) as String
  300. Dim oMasterKey as Object
  301. Dim oFilters() as Object
  302. Dim sTargetPath as String
  303. Dim sBookmarkName as String
  304. Dim oDBBookmarks as Object        
  305. Dim bLinkExists as Boolean
  306. Dim i as Integer    
  307. Dim sBaseBookmarkName as String
  308.     oMasterKey = GetRegistryKeyContent("org.openoffice.Office.TypeDetection/")
  309.     oFilters() = oMasterKey.Filters
  310.     FilterNames(0,0) = oFilters.GetByName("swriter: StarOffice XML (Writer)").UIName
  311.     FilterNames(0,1) = "*.sxw"
  312.     FilterNames(0,2) = ""
  313.     sTargetPath = StoreDocument(oDocument, FilterNames(), "Form_" & sDBName & "_" & TableName & ".sxw", WorkPath)
  314.     If sTargetPath <> "" Then
  315.         sBookmarkName = GetFileNamewithoutExtension(FileNameoutofPath(sTargetPath))
  316.         sBaseBookmarkName = sBookmarkName
  317.         oDBBookmarks = oDataSource.GetBookmarks()
  318.         i = 1
  319.         Do
  320.             bLinkExists = oDBBookmarks.HasbyName(sBookmarkName)
  321.             If bLinkExists Then
  322.                 i = i + 1
  323.                 sBookmarkName = sBaseBookmarkName & "_" & i
  324.             Else
  325.                 oDBBookmarks.insertByName(sBookmarkName, sTargetPath)
  326.             End If
  327.         Loop Until Not bLinkExists
  328.         bDisposeDoc = False
  329.         DlgFormDB.EndExecute()
  330.         ToggleDesignMode(oDocument)
  331.         oDBForm.Reload()
  332.     End If
  333. End Sub</script:module>